home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / a_utils / yacc / flexyacc / aflex.lha / aflex / src / misc_defsS.a < prev    next >
Text File  |  1991-05-16  |  23KB  |  578 lines

  1. -- Copyright (c) 1990 Regents of the University of California.
  2. -- All rights reserved.
  3. --
  4. -- This software was developed by John Self of the Arcadia project
  5. -- at the University of California, Irvine.
  6. --
  7. -- Redistribution and use in source and binary forms are permitted
  8. -- provided that the above copyright notice and this paragraph are
  9. -- duplicated in all such forms and that any documentation,
  10. -- advertising materials, and other materials related to such
  11. -- distribution and use acknowledge that the software was developed
  12. -- by the University of California, Irvine.  The name of the
  13. -- University may not be used to endorse or promote products derived
  14. -- from this software without specific prior written permission.
  15. -- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16. -- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17. -- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  
  19. -- TITLE miscellaneous definitions
  20. -- AUTHOR: John Self (UCI)
  21. -- DESCRIPTION contains all global variables used in aflex.
  22. --             also some subprograms which are commonly used.
  23. -- NOTES The real purpose of this file is to contain all miscellaneous
  24. --       items (functions, MACROS, variables definitions) which were at the
  25. --       top level of flex.
  26. -- $Header: /co/ua/self/arcadia/alex/ada/RCS/misc_defsS.a,v 1.8 90/01/04 13:39:
  27. -- 33 self Exp Locker: self $ 
  28.  
  29. with TEXT_IO, TSTRING;
  30. use TEXT_IO, TSTRING;
  31.  
  32. package MISC_DEFS is
  33.  
  34.   -- various definitions that were in parse.y
  35.   PAT, SCNUM, EPS, HEADCNT, TRAILCNT, ANYCCL, LASTCHAR, ACTVP, RULELEN : INTEGER
  36.     ;
  37.   TRLCONTXT, XCLUFLG, CCLSORTED, VARLENGTH, VARIABLE_TRAIL_RULE : BOOLEAN;
  38.  
  39.   MADEANY : BOOLEAN := FALSE;  -- whether we've made the '.' character class 
  40.   PREVIOUS_CONTINUED_ACTION : BOOLEAN; -- whether the previous rule's action wa
  41.                                        -- s '|'
  42.  
  43.   -- maximum line length we'll have to deal with 
  44.   MAXLINE : constant INTEGER := 1024;
  45.  
  46.   -- These typees are needed for the various allocators.
  47.   type UNBOUNDED_INT_ARRAY is array ( INTEGER range <> ) of INTEGER;
  48.   type INT_PTR is access UNBOUNDED_INT_ARRAY;
  49.   type INT_STAR is access INTEGER;
  50.   type UNBOUNDED_INT_STAR_ARRAY is array ( INTEGER range <> ) of INT_PTR;
  51.   type INT_STAR_PTR is access UNBOUNDED_INT_STAR_ARRAY;
  52.   type UNBOUNDED_VSTRING_ARRAY is array ( INTEGER range <> ) of VSTRING;
  53.   type VSTRING_PTR is access UNBOUNDED_VSTRING_ARRAY;
  54.   type BOOLEAN_ARRAY is array ( INTEGER range <> ) of BOOLEAN;
  55.   type BOOLEAN_PTR is access BOOLEAN_ARRAY;
  56.   type CHAR_ARRAY is array ( INTEGER range <> ) of CHARACTER;
  57.   type CHAR_PTR is access CHAR_ARRAY;
  58.  
  59.   -- different types of states; values are useful as masks, as well, for
  60.   -- routines like check_trailing_context()
  61.  
  62.   type STATE_ENUM is (STATE_NORMAL, STATE_TRAILING_CONTEXT);
  63.  
  64.   type UNBOUNDED_STATE_ENUM_ARRAY is array ( INTEGER range <> ) of STATE_ENUM;
  65.   type STATE_ENUM_PTR is access UNBOUNDED_STATE_ENUM_ARRAY;
  66.  
  67.   -- different types of rules
  68.   type RULE_ENUM is (RULE_NORMAL, RULE_VARIABLE);
  69.  
  70.   type UNBOUNDED_RULE_ENUM_ARRAY is array ( INTEGER range <> ) of RULE_ENUM;
  71.   type RULE_ENUM_PTR is access UNBOUNDED_RULE_ENUM_ARRAY;
  72.  
  73.   type DFAACC_TYPE is
  74.     record
  75.       DFAACC_SET : INT_PTR;
  76.       DFAACC_STATE : INTEGER;
  77.     end record;
  78.  
  79.   type UNBOUNDED_DFAACC_ARRAY is array ( INTEGER range <> ) of DFAACC_TYPE;
  80.   type DFAACC_PTR is access UNBOUNDED_DFAACC_ARRAY;
  81.  
  82.   -- maximum size of file name 
  83.  
  84.   FILENAMESIZE : constant INTEGER := 1024;
  85.  
  86.   function MIN (X, Y : in INTEGER) return INTEGER;
  87.   function MAX (X, Y : in INTEGER) return INTEGER;
  88.  
  89.   -- special chk[] values marking the slots taking by end-of-buffer and action
  90.   -- numbers
  91.  
  92.   EOB_POSITION : constant INTEGER := - 1;
  93.   ACTION_POSITION : constant INTEGER := - 2;
  94.  
  95.   -- number of data items per line for -f output
  96.   NUMDATAITEMS : constant INTEGER := 10;
  97.  
  98.   -- number of lines of data in -f output before inserting a blank line for
  99.   -- readability.
  100.  
  101.   NUMDATALINES : constant INTEGER := 10;
  102.  
  103.   -- transition_struct_out() definitions
  104.   TRANS_STRUCT_PRINT_LENGTH : constant INTEGER := 15;
  105.  
  106.   -- returns true if an nfa state has an epsilon out-transition slot
  107.   -- that can be used.  This definition is currently not used.
  108.  
  109.   function FREE_EPSILON ( STATE : in INTEGER) return BOOLEAN;
  110.  
  111.   -- returns true if an nfa state has an epsilon out-transition character
  112.   -- and both slots are free
  113.  
  114.   function SUPER_FREE_EPSILON (STATE : in INTEGER) return BOOLEAN;
  115.  
  116.   -- maximum number of NFA states that can comprise a DFA state.  It's real
  117.   -- big because if there's a lot of rules, the initial state will have a
  118.   -- huge epsilon closure.
  119.  
  120.   INITIAL_MAX_DFA_SIZE : constant INTEGER := 750;
  121.   MAX_DFA_SIZE_INCREMENT : constant INTEGER := 750;
  122.  
  123.   -- a note on the following masks.  They are used to mark accepting numbers
  124.   -- as being special.  As such, they implicitly limit the number of accepting
  125.   -- numbers (i.e., rules) because if there are too many rules the rule numbers
  126.   -- will overload the mask bits.  Fortunately, this limit is \large/ (0x2000 ==
  127.   -- 8192) so unlikely to actually cause any problems.  A check is made in
  128.   -- new_rule() to ensure that this limit is not reached.
  129.  
  130.   -- mask to mark a trailing context accepting number
  131.   -- #define YY_TRAILING_MASK 0x2000
  132.   YY_TRAILING_MASK : constant INTEGER := 16#2000#;
  133.  
  134.  
  135.   -- mask to mark the accepting number of the "head" of a trailing context rule
  136.   -- #define YY_TRAILING_HEAD_MASK 0x4000
  137.   YY_TRAILING_HEAD_MASK : constant INTEGER := 16#4000#;
  138.  
  139.   -- maximum number of rules, as outlined in the above note
  140.   MAX_RULE : constant INTEGER := YY_TRAILING_MASK - 1;
  141.  
  142.  
  143.   -- NIL must be 0.  If not, its special meaning when making equivalence classes
  144.   -- (it marks the representative of a given e.c.) will be unidentifiable
  145.  
  146.   NIL : constant INTEGER := 0;
  147.  
  148.   JAM : constant INTEGER := - 1; -- to mark a missing DFA transition 
  149.   NO_TRANSITION : constant INTEGER := NIL;
  150.   UNIQUE : constant INTEGER := - 1; -- marks a symbol as an e.c. representative
  151.   INFINITY : constant INTEGER := - 1; -- for x{5,} constructions
  152.  
  153.   -- size of input alphabet - should be size of ASCII set
  154.   CSIZE : constant INTEGER := 127;
  155.  
  156.   INITIAL_MAX_CCLS : constant INTEGER := 100; -- max number of unique character
  157.                                               --  classes
  158.   MAX_CCLS_INCREMENT : constant INTEGER := 100;
  159.  
  160.   -- size of table holding members of character classes
  161.   INITIAL_MAX_CCL_TBL_SIZE : constant INTEGER := 500;
  162.   MAX_CCL_TBL_SIZE_INCREMENT : constant INTEGER := 250;
  163.   INITIAL_MAX_RULES : constant INTEGER := 100;
  164.   -- default maximum number of rules
  165.   MAX_RULES_INCREMENT : constant INTEGER := 100;
  166.  
  167.   INITIAL_MNS : constant INTEGER := 2000; -- default maximum number of nfa stat
  168.                                           -- es
  169.   MNS_INCREMENT : constant INTEGER := 1000; -- amount to bump above by if it's 
  170.                                             -- not enough
  171.  
  172.   INITIAL_MAX_DFAS : constant INTEGER := 1000; -- default maximum number of dfa
  173.                                                --  states
  174.   MAX_DFAS_INCREMENT : constant INTEGER := 1000;
  175.  
  176.   JAMSTATE_CONST : constant INTEGER := - 32766; -- marks a reference to the sta
  177.                                                 -- te that always jams
  178.  
  179.   -- enough so that if it's subtracted from an NFA state number, the result
  180.   -- is guaranteed to be negative
  181.  
  182.   MARKER_DIFFERENCE : constant INTEGER := 32000;
  183.   MAXIMUM_MNS : constant INTEGER := 31999;
  184.  
  185.   -- maximum number of nxt/chk pairs for non-templates
  186.   INITIAL_MAX_XPAIRS : constant INTEGER := 2000;
  187.   MAX_XPAIRS_INCREMENT : constant INTEGER := 2000;
  188.  
  189.   -- maximum number of nxt/chk pairs needed for templates
  190.   INITIAL_MAX_TEMPLATE_XPAIRS : constant INTEGER := 2500;
  191.   MAX_TEMPLATE_XPAIRS_INCREMENT : constant INTEGER := 2500;
  192.  
  193.   SYM_EPSILON : constant INTEGER := 0; -- to mark transitions on the symbol eps
  194.                                        -- ilon
  195.  
  196.   INITIAL_MAX_SCS : constant INTEGER := 40; -- maximum number of start conditio
  197.                                             -- ns
  198.   MAX_SCS_INCREMENT : constant INTEGER := 40; -- amount to bump by if it's not 
  199.                                               -- enough
  200.  
  201.   ONE_STACK_SIZE : constant INTEGER := 500; -- stack of states with only one ou
  202.                                             -- t-transition
  203.   SAME_TRANS : constant INTEGER := - 1; -- transition is the same as "default" 
  204.                                         -- entry for state
  205.  
  206.   -- the following percentages are used to tune table compression:
  207.   --
  208.   -- the percentage the number of out-transitions a state must be of the
  209.   -- number of equivalence classes in order to be considered for table
  210.   -- compaction by using protos
  211.  
  212.   PROTO_SIZE_PERCENTAGE : constant INTEGER := 15;
  213.  
  214.   -- the percentage the number of homogeneous out-transitions of a state
  215.   -- must be of the number of total out-transitions of the state in order
  216.   -- that the state's transition table is first compared with a potential 
  217.   -- template of the most common out-transition instead of with the first
  218.   --proto in the proto queue
  219.  
  220.   CHECK_COM_PERCENTAGE : constant INTEGER := 50;
  221.  
  222.   -- the percentage the number of differences between a state's transition
  223.   -- table and the proto it was first compared with must be of the total
  224.   -- number of out-transitions of the state in order to keep the first
  225.   -- proto as a good match and not search any further
  226.  
  227.   FIRST_MATCH_DIFF_PERCENTAGE : constant INTEGER := 10;
  228.  
  229.   -- the percentage the number of differences between a state's transition
  230.   -- table and the most similar proto must be of the state's total number
  231.   -- of out-transitions to use the proto as an acceptable close match
  232.  
  233.   ACCEPTABLE_DIFF_PERCENTAGE : constant INTEGER := 50;
  234.  
  235.   -- the percentage the number of homogeneous out-transitions of a state
  236.   -- must be of the number of total out-transitions of the state in order
  237.   -- to consider making a template from the state
  238.  
  239.   TEMPLATE_SAME_PERCENTAGE : constant INTEGER := 60;
  240.  
  241.   -- the percentage the number of differences between a state's transition
  242.   -- table and the most similar proto must be of the state's total number
  243.   -- of out-transitions to create a new proto from the state
  244.  
  245.   NEW_PROTO_DIFF_PERCENTAGE : constant INTEGER := 20;
  246.  
  247.   -- the percentage the total number of out-transitions of a state must be
  248.   -- of the number of equivalence classes in order to consider trying to
  249.   -- fit the transition table into "holes" inside the nxt/chk table.
  250.  
  251.   INTERIOR_FIT_PERCENTAGE : constant INTEGER := 15;
  252.  
  253.   -- size of region set aside to cache the complete transition table of
  254.   -- protos on the proto queue to enable quick comparisons
  255.  
  256.   PROT_SAVE_SIZE : constant INTEGER := 2000;
  257.  
  258.   MSP : constant INTEGER := 50; -- maximum number of saved protos (protos on th
  259.                                 -- e proto queue)
  260.  
  261.   -- maximum number of out-transitions a state can have that we'll rummage
  262.   -- around through the interior of the internal fast table looking for a
  263.   -- spot for it
  264.  
  265.   MAX_XTIONS_FULL_INTERIOR_FIT : constant INTEGER := 4;
  266.  
  267.   -- maximum number of rules which will be reported as being associated
  268.   -- with a DFA state
  269.  
  270.   MAX_ASSOC_RULES : constant INTEGER := 100;
  271.  
  272.   -- number that, if used to subscript an array, has a good chance of producing
  273.   -- an error; should be small enough to fit into a short
  274.  
  275.   BAD_SUBSCRIPT : constant INTEGER := - 32767;
  276.  
  277.   -- Declarations for global variables.
  278.  
  279.   -- variables for symbol tables:
  280.   -- sctbl - start-condition symbol table
  281.   -- ndtbl - name-definition symbol table
  282.   -- ccltab - character class text symbol table
  283.  
  284.   type HASH_ENTRY;
  285.   type HASH_LINK is access HASH_ENTRY;
  286.   type HASH_ENTRY is
  287.     record
  288.       PREV, NEXT : HASH_LINK;
  289.       NAME, STR_VAL : VSTRING;
  290.       INT_VAL : INTEGER;
  291.     end record;
  292.  
  293.   type HASH_TABLE is array ( INTEGER range <> ) of HASH_LINK;
  294.  
  295.   NAME_TABLE_HASH_SIZE : constant INTEGER := 101;
  296.   START_COND_HASH_SIZE : constant INTEGER := 101;
  297.   CCL_HASH_SIZE : constant INTEGER := 101;
  298.  
  299.   subtype NDTBL_TYPE is HASH_TABLE (0 .. NAME_TABLE_HASH_SIZE - 1);
  300.   NDTBL : NDTBL_TYPE;
  301.   subtype SCTBL_TYPE is HASH_TABLE (0 .. START_COND_HASH_SIZE - 1);
  302.   SCTBL : SCTBL_TYPE;
  303.   subtype CCLTAB_TYPE is HASH_TABLE (0 .. CCL_HASH_SIZE);
  304.   CCLTAB : CCLTAB_TYPE;
  305.  
  306.   -- variables for flags:
  307.   -- printstats - if true (-v), dump statistics
  308.   -- syntaxerror - true if a syntax error has been found
  309.   -- eofseen - true if we've seen an eof in the input file
  310.   -- ddebug - if true (-d), make a "debug" scanner
  311.   -- trace - if true (-T), trace processing
  312.   -- spprdflt - if true (-s), suppress the default rule
  313.   -- interactive - if true (-I), generate an interactive scanner
  314.   -- caseins - if true (-i), generate a case-insensitive scanner
  315.   -- useecs - if true (-ce flag), use equivalence classes
  316.   -- fulltbl - if true (-cf flag), don't compress the DFA state table
  317.   -- usemecs - if true (-cm flag), use meta-equivalence classes
  318.   -- gen_line_dirs - if true (i.e., no -L flag), generate #line directives
  319.   -- performance_report - if true (i.e., -p flag), generate a report relating
  320.   --   to scanner performance
  321.   -- backtrack_report - if true (i.e., -b flag), generate "lex.backtrack" file
  322.   --   listing backtracking states
  323.   -- continued_action - true if this rule's action is to "fall through" to
  324.   --                    the next rule's action (i.e., the '|' action)
  325.  
  326.   PRINTSTATS, DDEBUG, SPPRDFLT,
  327.   INTERACTIVE, CASEINS, USEECS, FULLTBL, USEMECS,
  328.   GEN_LINE_DIRS, PERFORMANCE_REPORT, BACKTRACK_REPORT,
  329.   TRACE, EOFSEEN, CONTINUED_ACTION : BOOLEAN;
  330.  
  331.   SYNTAXERROR : BOOLEAN;
  332.  
  333.   -- variables used in the aflex input routines:
  334.   -- datapos - characters on current output line
  335.   -- dataline - number of contiguous lines of data in current data
  336.   --    statement.  Used to generate readable -f output
  337.   -- skelfile - the skeleton file
  338.   -- yyin - input file
  339.   -- temp_action_file - temporary file to hold actions
  340.   -- backtrack_file - file to summarize backtracking states to
  341.   -- infilename - name of input file
  342.   -- linenum - current input line number
  343.  
  344.   DATAPOS, DATALINE, LINENUM : INTEGER;
  345.  
  346.   SKELFILE, YYIN, TEMP_ACTION_FILE, BACKTRACK_FILE, DEF_FILE : FILE_TYPE;
  347.   INFILENAME : VSTRING;
  348.  
  349.   -- variables for stack of states having only one out-transition:
  350.   -- onestate - state number
  351.   -- onesym - transition symbol
  352.   -- onenext - target state
  353.   -- onedef - default base entry
  354.   -- onesp - stack pointer
  355.  
  356.   ONESTATE, ONESYM, ONENEXT, ONEDEF : array (0 .. ONE_STACK_SIZE - 1) of INTEGER
  357.     ;
  358.   ONESP : INTEGER;
  359.  
  360.  
  361.   -- variables for nfa machine data:
  362.   -- current_mns - current maximum on number of NFA states
  363.   -- num_rules - number of the last accepting state; also is number of
  364.   --             rules created so far
  365.   -- current_max_rules - current maximum number of rules
  366.   -- lastnfa - last nfa state number created
  367.   -- firstst - physically the first state of a fragment
  368.   -- lastst - last physical state of fragment
  369.   -- finalst - last logical state of fragment
  370.   -- transchar - transition character
  371.   -- trans1 - transition state
  372.   -- trans2 - 2nd transition state for epsilons
  373.   -- accptnum - accepting number
  374.   -- assoc_rule - rule associated with this NFA state (or 0 if none)
  375.   -- state_type - a STATE_xxx type identifying whether the state is part
  376.   --              of a normal rule, the leading state in a trailing context
  377.   --              rule (i.e., the state which marks the transition from
  378.   --              recognizing the text-to-be-matched to the beginning of
  379.   --              the trailing context), or a subsequent state in a trailing
  380.   --              context rule
  381.   -- rule_type - a RULE_xxx type identifying whether this a a ho-hum
  382.   --             normal rule or one which has variable head & trailing
  383.   --             context
  384.   -- rule_linenum - line number associated with rule
  385.  
  386.   CURRENT_MNS, NUM_RULES, CURRENT_MAX_RULES, LASTNFA : INTEGER;
  387.   FIRSTST, LASTST, FINALST, TRANSCHAR, TRANS1, TRANS2 : INT_PTR;
  388.   ACCPTNUM, ASSOC_RULE, RULE_LINENUM : INT_PTR;
  389.   RULE_TYPE : RULE_ENUM_PTR;
  390.   STATE_TYPE : STATE_ENUM_PTR;
  391.  
  392.   -- global holding current type of state we're making
  393.  
  394.   CURRENT_STATE_ENUM : STATE_ENUM;
  395.  
  396.   -- true if the input rules include a rule with both variable-length head
  397.   -- and trailing context, false otherwise
  398.  
  399.   VARIABLE_TRAILING_CONTEXT_RULES : BOOLEAN;
  400.  
  401.  
  402.   -- variables for protos:
  403.   -- numtemps - number of templates created
  404.   -- numprots - number of protos created
  405.   -- protprev - backlink to a more-recently used proto
  406.   -- protnext - forward link to a less-recently used proto
  407.   -- prottbl - base/def table entry for proto
  408.   -- protcomst - common state of proto
  409.   -- firstprot - number of the most recently used proto
  410.   -- lastprot - number of the least recently used proto
  411.   -- protsave contains the entire state array for protos
  412.  
  413.   NUMTEMPS, NUMPROTS, FIRSTPROT, LASTPROT : INTEGER;
  414.   PROTPREV, PROTNEXT, PROTTBL, PROTCOMST : array (0 .. MSP - 1) of INTEGER;
  415.   PROTSAVE : array (0 .. PROT_SAVE_SIZE - 1) of INTEGER;
  416.  
  417.  
  418.   -- variables for managing equivalence classes:
  419.   -- numecs - number of equivalence classes
  420.   -- nextecm - forward link of Equivalence Class members
  421.   -- ecgroup - class number or backward link of EC members
  422.   -- nummecs - number of meta-equivalence classes (used to compress
  423.   --   templates)
  424.   -- tecfwd - forward link of meta-equivalence classes members
  425.   -- * tecbck - backward link of MEC's
  426.  
  427.   NUMECS, NUMMECS : INTEGER;
  428.   subtype C_SIZE_ARRAY is UNBOUNDED_INT_ARRAY (0 .. CSIZE);
  429.   type C_SIZE_BOOL_ARRAY is array (0 .. CSIZE) of BOOLEAN;
  430.   NEXTECM, ECGROUP, TECFWD, TECBCK : C_SIZE_ARRAY;
  431.  
  432.  
  433.   -- variables for start conditions:
  434.   -- lastsc - last start condition created
  435.   -- current_max_scs - current limit on number of start conditions
  436.   -- scset - set of rules active in start condition
  437.   -- scbol - set of rules active only at the beginning of line in a s.c.
  438.   -- scxclu - true if start condition is exclusive
  439.   -- sceof - true if start condition has EOF rule
  440.   -- scname - start condition name
  441.   -- actvsc - stack of active start conditions for the current rule
  442.  
  443.   LASTSC, CURRENT_MAX_SCS : INTEGER;
  444.   SCSET, SCBOL : INT_PTR;
  445.   SCXCLU, SCEOF : BOOLEAN_PTR;
  446.   ACTVSC : INT_PTR;
  447.   SCNAME : VSTRING_PTR;
  448.  
  449.  
  450.   -- variables for dfa machine data:
  451.   -- current_max_dfa_size - current maximum number of NFA states in DFA
  452.   -- current_max_xpairs - current maximum number of non-template xtion pairs
  453.   -- current_max_template_xpairs - current maximum number of template pairs
  454.   -- current_max_dfas - current maximum number DFA states
  455.   -- lastdfa - last dfa state number created
  456.   -- nxt - state to enter upon reading character
  457.   -- chk - check value to see if "nxt" applies
  458.   -- tnxt - internal nxt table for templates
  459.   -- base - offset into "nxt" for given state
  460.   -- def - where to go if "chk" disallows "nxt" entry
  461.   -- tblend - last "nxt/chk" table entry being used
  462.   -- firstfree - first empty entry in "nxt/chk" table
  463.   -- dss - nfa state set for each dfa
  464.   -- dfasiz - size of nfa state set for each dfa
  465.   -- dfaacc - accepting set for each dfa state (or accepting number, if
  466.   --    -r is not given)
  467.   -- accsiz - size of accepting set for each dfa state
  468.   -- dhash - dfa state hash value
  469.   -- numas - number of DFA accepting states created; note that this
  470.   --    is not necessarily the same value as num_rules, which is the analogous
  471.   --    value for the NFA
  472.   -- numsnpairs - number of state/nextstate transition pairs
  473.   -- jambase - position in base/def where the default jam table starts
  474.   -- jamstate - state number corresponding to "jam" state
  475.   -- end_of_buffer_state - end-of-buffer dfa state number
  476.  
  477.   CURRENT_MAX_DFA_SIZE, CURRENT_MAX_XPAIRS : INTEGER;
  478.   CURRENT_MAX_TEMPLATE_XPAIRS, CURRENT_MAX_DFAS : INTEGER;
  479.   LASTDFA, LASTTEMP : INTEGER;
  480.   NXT, CHK, TNXT : INT_PTR;
  481.   BASE, DEF , DFASIZ : INT_PTR;
  482.   TBLEND, FIRSTFREE : INTEGER;
  483.   DSS : INT_STAR_PTR;
  484.   DFAACC : DFAACC_PTR;
  485.  
  486.   -- type declaration for dfaacc_type moved above
  487.  
  488.   ACCSIZ, DHASH : INT_PTR;
  489.   END_OF_BUFFER_STATE, NUMSNPAIRS, JAMBASE, JAMSTATE, NUMAS : INTEGER;
  490.  
  491.   -- variables for ccl information:
  492.   -- lastccl - ccl index of the last created ccl
  493.   -- current_maxccls - current limit on the maximum number of unique ccl's
  494.   -- cclmap - maps a ccl index to its set pointer
  495.   -- ccllen - gives the length of a ccl
  496.   -- cclng - true for a given ccl if the ccl is negated
  497.   -- cclreuse - counts how many times a ccl is re-used
  498.   -- current_max_ccl_tbl_size - current limit on number of characters needed
  499.   --    to represent the unique ccl's
  500.   -- ccltbl - holds the characters in each ccl - indexed by cclmap
  501.  
  502.   CURRENT_MAX_CCL_TBL_SIZE, LASTCCL, CURRENT_MAXCCLS, CCLREUSE : INTEGER;
  503.   CCLMAP, CCLLEN, CCLNG : INT_PTR;
  504.  
  505.   CCLTBL : CHAR_PTR;
  506.  
  507.  
  508.   -- variables for miscellaneous information:
  509.   -- starttime - real-time when we started
  510.   -- endtime - real-time when we ended
  511.   -- nmstr - last NAME scanned by the scanner
  512.   -- sectnum - section number currently being parsed
  513.   -- nummt - number of empty nxt/chk table entries
  514.   -- hshcol - number of hash collisions detected by snstods
  515.   -- dfaeql - number of times a newly created dfa was equal to an old one
  516.   -- numeps - number of epsilon NFA states created
  517.   -- eps2 - number of epsilon states which have 2 out-transitions
  518.   -- num_reallocs - number of times it was necessary to realloc() a group
  519.   --          of arrays
  520.   -- tmpuses - number of DFA states that chain to templates
  521.   -- totnst - total number of NFA states used to make DFA states
  522.   -- peakpairs - peak number of transition pairs we had to store internally
  523.   -- numuniq - number of unique transitions
  524.   -- numdup - number of duplicate transitions
  525.   -- hshsave - number of hash collisions saved by checking number of states
  526.   -- num_backtracking - number of DFA states requiring back-tracking
  527.   -- bol_needed - whether scanner needs beginning-of-line recognition
  528.  
  529.   NMSTR : VSTRING;
  530.   SECTNUM, NUMMT, HSHCOL, DFAEQL, NUMEPS, EPS2, NUM_REALLOCS : INTEGER;
  531.   TMPUSES, TOTNST, PEAKPAIRS, NUMUNIQ, NUMDUP, HSHSAVE : INTEGER;
  532.   NUM_BACKTRACKING : INTEGER;
  533.   BOL_NEEDED : BOOLEAN;
  534.  
  535.   function ALLOCATE_INTEGER_ARRAY (SIZE : in INTEGER) return INT_PTR;
  536.  
  537.   function ALLOCATE_INT_PTR_ARRAY (SIZE : in INTEGER) return INT_STAR_PTR;
  538.  
  539.  
  540.  
  541.   function ALLOCATE_VSTRING_ARRAY (SIZE : in INTEGER) return VSTRING_PTR;
  542.  
  543.   function ALLOCATE_DFAACC_UNION (SIZE : in INTEGER) return DFAACC_PTR;
  544.  
  545.   function  ALLOCATE_CHARACTER_ARRAY (SIZE : in INTEGER) return CHAR_PTR;
  546.  
  547.   function ALLOCATE_RULE_ENUM_ARRAY (SIZE : in INTEGER) return RULE_ENUM_PTR;
  548.  
  549.   function ALLOCATE_STATE_ENUM_ARRAY (SIZE : in INTEGER) return STATE_ENUM_PTR;
  550.  
  551.   function ALLOCATE_BOOLEAN_ARRAY (SIZE : in INTEGER) return BOOLEAN_PTR;
  552.  
  553.   procedure REALLOCATE_INTEGER_ARRAY (ARR : in out INT_PTR;
  554.        SIZE : in INTEGER);
  555.  
  556.   procedure REALLOCATE_INT_PTR_ARRAY (ARR : in out INT_STAR_PTR;
  557.        SIZE : in INTEGER);
  558.  
  559.   procedure REALLOCATE_VSTRING_ARRAY (ARR : in out VSTRING_PTR;
  560.         SIZE : in INTEGER);
  561.  
  562.   procedure REALLOCATE_DFAACC_UNION (ARR : in out DFAACC_PTR;
  563.       SIZE : in INTEGER);
  564.  
  565.   procedure REALLOCATE_CHARACTER_ARRAY (ARR : in out CHAR_PTR;
  566.        SIZE : in INTEGER);
  567.  
  568.   procedure REALLOCATE_RULE_ENUM_ARRAY (ARR : in out RULE_ENUM_PTR;
  569.        SIZE : in INTEGER);
  570.  
  571.   procedure REALLOCATE_STATE_ENUM_ARRAY (ARR : in out STATE_ENUM_PTR;
  572.        SIZE : in INTEGER);
  573.  
  574.   procedure REALLOCATE_BOOLEAN_ARRAY (ARR : in out BOOLEAN_PTR;
  575.        SIZE : in INTEGER);
  576.  
  577. end MISC_DEFS;
  578.